home *** CD-ROM | disk | FTP | other *** search
- /***************************************************
- * *
- * *** HAPPy Pascal Compiler *** *
- * 作業用heapメモリ管理処理 *
- * *
- * Copyright (c) H.Asano 1992 *
- * *
- ***************************************************/
-
- #define EXTERN extern
-
- #define Maxheap 32768 /* 最大heapメモリ量 */
-
- #include <malloc.h>
- #include <stdlib.h>
- #include "pascomp.h"
-
-
- extern void pcerr(int,char*) ;
- extern void term(void) ;
-
- static char *topheap ; /* 今のheapメモリ先頭 */
- static size_t total = 0 ; /* 確保量累計 */
-
-
- /***************************************/
- /* initheap() : 初期メモリ一括確保処理 */
- /***************************************/
- void initheap(void)
- {
- topheap = (char*)malloc(Maxheap); /* 一括確保する */
- if(topheap == nil) {
- pcerr(700,"");
- term() ;
- }
- }
-
- /**************************************/
- /* Malloc() : メモリ確保処理 */
- /**************************************/
- void *Malloc(size_t size)
- {
- void *adr ;
-
- adr = (void*)topheap ;
- size = (size+1)/2 * 2 ;
- topheap += size ;
- total += size ;
- if(Maxheap >= total) return(adr); /* メモリ割当が可能な時 */
- else { /* 割当不可能の時 */
- pcerr(700,"") ; /* 作業エリア確保失敗 */
- term() ; /* 終了処理 */
- }
- }
-
- /**************************************/
- /* mark() : 一括解放ポイントマーク処理 */
- /**************************************/
- void *mark(void)
- {
- return((void*)topheap) ;
- }
-
- /**************************************/
- /* release() : 一括解放処理 */
- /**************************************/
- void release(void *adr)
- {
- total -= (size_t)(topheap - (char*)adr) ;
- topheap = (char*)adr ;
- }